home *** CD-ROM | disk | FTP | other *** search
/ ADA Programming Guide / ADA Programming Guide.iso / ada_gnu / adainc / a-textio.ads < prev    next >
Text File  |  1996-01-30  |  15KB  |  514 lines

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                         GNAT RUNTIME COMPONENTS                          --
  4. --                                                                          --
  5. --                          A D A . T E X T _ I O                           --
  6. --                                                                          --
  7. --                                 S p e c                                  --
  8. --                                                                          --
  9. --                            $Revision: 1.26 $                             --
  10. --                                                                          --
  11. -- This specification is adapted from the Ada Reference Manual for use with --
  12. -- GNAT.  In accordance with the copyright of that document, you can freely --
  13. -- copy and modify this specification,  provided that if you redistribute a --
  14. -- modified version,  any changes that you have made are clearly indicated. --
  15. --                                                                          --
  16. ------------------------------------------------------------------------------
  17.  
  18.  
  19. with Ada.IO_Exceptions;
  20. with System;
  21. with System.Dependent_Constants;
  22.  
  23. package Ada.Text_IO is
  24.  
  25.    type File_Type is limited private;
  26.    type File_Mode is (In_File, Out_File, Append_File);
  27.  
  28.    type Count is range 0 .. System.Dependent_Constants.Count_Max;
  29.  
  30.    subtype Positive_Count is Count range 1 .. Count'Last;
  31.  
  32.    Unbounded : constant Count := 0;
  33.    --  Line and page length
  34.  
  35.    subtype Field is Integer range 0 .. System.Dependent_Constants.Field_Max;
  36.  
  37.    subtype Number_Base is Integer range 2 .. 16;
  38.  
  39.    type Type_Set is (Lower_Case, Upper_Case);
  40.  
  41.    ---------------------
  42.    -- File Management --
  43.    ---------------------
  44.  
  45.    procedure Create
  46.      (File : in out File_Type;
  47.       Mode : in File_Mode := Out_File;
  48.       Name : in String := "";
  49.       Form : in String := "");
  50.  
  51.    procedure Open
  52.      (File : in out File_Type;
  53.       Mode : in File_Mode;
  54.       Name : in String;
  55.       Form : in String := "");
  56.  
  57.    procedure Close  (File : in out File_Type);
  58.    procedure Delete (File : in out File_Type);
  59.    procedure Reset  (File : in out File_Type; Mode : in File_Mode);
  60.    procedure Reset  (File : in out File_Type);
  61.  
  62.    function Mode (File : in File_Type) return File_Mode;
  63.    function Name (File : in File_Type) return String;
  64.    function Form (File : in File_Type) return String;
  65.  
  66.    function Is_Open (File : in File_Type) return Boolean;
  67.  
  68.    ------------------------------------------------------
  69.    -- Control of default input, output and error files --
  70.    ------------------------------------------------------
  71.  
  72.    procedure Set_Input  (File : in File_Type);
  73.    procedure Set_Output (File : in File_Type);
  74.    procedure Set_Error  (File : in File_Type);
  75.  
  76.    function Standard_Input  return File_Type;
  77.    function Standard_Output return File_Type;
  78.    function Standard_Error  return File_Type;
  79.  
  80.    function Current_Input  return File_Type;
  81.    function Current_Output return File_Type;
  82.    function Current_Error  return File_Type;
  83.  
  84.    type File_Access is access constant File_Type;
  85.  
  86.    function Standard_Input  return File_Access;
  87.    function Standard_Output return File_Access;
  88.    function Standard_Error  return File_Access;
  89.  
  90.    function Current_Input  return File_Access;
  91.    function Current_Output return File_Access;
  92.    function Current_Error  return File_Access;
  93.  
  94.    --------------------
  95.    -- Buffer control --
  96.    --------------------
  97.  
  98.    procedure Flush (File : in out File_Type);
  99.    procedure Flush;
  100.  
  101.    --------------------------------------------
  102.    -- Specification of line and page lengths --
  103.    --------------------------------------------
  104.  
  105.    procedure Set_Line_Length (File : in File_Type; To : in Count);
  106.    procedure Set_Line_Length (To : in Count);
  107.  
  108.    procedure Set_Page_Length (File : in File_Type; To : in Count);
  109.    procedure Set_Page_Length (To : in Count);
  110.  
  111.    function Line_Length (File : in File_Type) return Count;
  112.    function Line_Length return Count;
  113.  
  114.    function Page_Length (File : in File_Type) return Count;
  115.    function Page_Length return Count;
  116.  
  117.    ------------------------------------
  118.    -- Column, Line, and Page Control --
  119.    ------------------------------------
  120.  
  121.    procedure New_Line (File : in File_Type; Spacing : in Positive_Count := 1);
  122.    procedure New_Line (Spacing : in Positive_Count := 1);
  123.  
  124.    procedure Skip_Line (File : in File_Type; Spacing : in Positive_Count := 1);
  125.    procedure Skip_Line (Spacing : in Positive_Count := 1);
  126.  
  127.    function End_Of_Line (File : in File_Type) return Boolean;
  128.    function End_Of_Line return Boolean;
  129.  
  130.    procedure New_Page (File : in File_Type);
  131.    procedure New_Page;
  132.  
  133.    procedure Skip_Page (File : in File_Type);
  134.    procedure Skip_Page;
  135.  
  136.    function End_Of_Page (File : in File_Type) return Boolean;
  137.    function End_Of_Page return Boolean;
  138.  
  139.    function End_Of_File (File : in File_Type) return Boolean;
  140.    function End_Of_File return Boolean;
  141.  
  142.    procedure Set_Col (File : in File_Type;  To : in Positive_Count);
  143.    procedure Set_Col (To : in Positive_Count);
  144.  
  145.    procedure Set_Line (File : in File_Type; To : in Positive_Count);
  146.    procedure Set_Line (To : in Positive_Count);
  147.  
  148.    function Col (File : in File_Type) return Positive_Count;
  149.    function Col return Positive_Count;
  150.  
  151.    function Line (File : in File_Type) return Positive_Count;
  152.    function Line return Positive_Count;
  153.  
  154.    function Page (File : in File_Type) return Positive_Count;
  155.    function Page return Positive_Count;
  156.  
  157.    -----------------------------
  158.    -- Characters Input-Output --
  159.    -----------------------------
  160.  
  161.    procedure Get (File : in File_Type; Item : out Character);
  162.    procedure Get (Item : out Character);
  163.    procedure Put (File : in File_Type; Item : in Character);
  164.    procedure Put (Item : in Character);
  165.  
  166.    procedure Look_Ahead
  167.      (File        : in File_Type;
  168.       Item        : out Character;
  169.       End_Of_Line : out Boolean);
  170.  
  171.    procedure Look_Ahead
  172.      (Item        : out Character;
  173.       End_of_Line : out Boolean);
  174.  
  175.    procedure Get_Immediate
  176.      (File : in File_Type;
  177.       Item : out Character);
  178.  
  179.    procedure Get_Immediate
  180.      (Item : out Character);
  181.  
  182.    procedure Get_Immediate
  183.      (File      : in File_Type;
  184.       Item      : out Character;
  185.       Available : out Boolean);
  186.  
  187.    procedure Get_Immediate
  188.      (Item      : out Character;
  189.       Available : out Boolean);
  190.  
  191.    --------------------------
  192.    -- Strings Input-Output --
  193.    --------------------------
  194.  
  195.    procedure Get (File : in File_Type; Item : out String);
  196.    procedure Get (Item : out String);
  197.    procedure Put (File : in File_Type; Item : in String);
  198.    procedure Put (Item : in String);
  199.  
  200.    procedure Get_Line
  201.      (File : in File_Type;
  202.       Item : out String;
  203.       Last : out Natural);
  204.  
  205.    procedure Get_Line
  206.      (Item : out String;
  207.       Last : out Natural);
  208.  
  209.    procedure Put_Line
  210.      (File : in File_Type;
  211.       Item : in String);
  212.  
  213.    procedure Put_Line
  214.      (Item : in String);
  215.  
  216.    --------------------------------------------------------
  217.    -- Generic packages for Input-Output of Integer Types --
  218.    --------------------------------------------------------
  219.  
  220.    generic
  221.       type Num is range <>;
  222.  
  223.    package Integer_Io is
  224.  
  225.       Default_Width : Field := Num'Width;
  226.       Default_Base  : Number_Base := 10;
  227.  
  228.       procedure Get
  229.         (File  : in File_Type;
  230.          Item  : out Num;
  231.          Width : in Field := 0);
  232.  
  233.       procedure Get
  234.         (Item  : out Num;
  235.          Width : in Field := 0);
  236.  
  237.       procedure Put
  238.         (File  : in File_Type;
  239.          Item  : in Num;
  240.          Width : in Field := Default_Width;
  241.          Base  : in Number_Base := Default_Base);
  242.  
  243.       procedure Put
  244.         (Item  : in Num;
  245.          Width : in Field := Default_Width;
  246.          Base  : in Number_Base := Default_Base);
  247.  
  248.       procedure Get
  249.         (From : in String;
  250.          Item : out Num;
  251.          Last : out Positive);
  252.  
  253.       procedure Put
  254.         (To   : out String;
  255.          Item : in Num;
  256.          Base : in Number_Base := Default_Base);
  257.  
  258.    end Integer_Io;
  259.  
  260.    -----------------------------------
  261.    -- Input-Output of Modular Types --
  262.    -----------------------------------
  263.  
  264.    generic
  265.       type Num is mod <>;
  266.  
  267.    package Modular_IO is
  268.  
  269.       Default_Width : Field := Num'Width;
  270.       Default_Base  : Number_Base := 10;
  271.  
  272.       procedure Get
  273.         (File  : in  File_Type;
  274.          Item  : out Num;
  275.          Width : in Field := 0);
  276.  
  277.       procedure Get
  278.         (Item  : out Num;
  279.          Width : in Field := 0);
  280.  
  281.       procedure Put
  282.         (File  : in File_Type;
  283.          Item  : in Num;
  284.          Width : in Field := Default_Width;
  285.          Base  : in Number_Base := Default_Base);
  286.  
  287.       procedure Put
  288.         (Item  : in Num;
  289.          Width : in Field := Default_Width;
  290.          Base  : in Number_Base := Default_Base);
  291.  
  292.       procedure Get
  293.         (From : in  String;
  294.          Item : out Num;
  295.          Last : out Positive);
  296.  
  297.       procedure Put
  298.         (To   : out String;
  299.          Item : in Num;
  300.          Base : in Number_Base := Default_Base);
  301.  
  302.    end Modular_IO;
  303.  
  304.    --------------------------------
  305.    -- Input-Output of Real Types --
  306.    --------------------------------
  307.  
  308.    generic
  309.       type Num is digits <>;
  310.  
  311.    package Float_Io is
  312.  
  313.       Default_Fore : Field := 2;
  314.       Default_Aft  : Field := Num'Digits - 1;
  315.       Default_Exp  : Field := 3;
  316.  
  317.       procedure Get
  318.         (File  : in File_Type;
  319.          Item  : out Num;
  320.          Width : in Field := 0);
  321.  
  322.       procedure Get
  323.         (Item  : out Num;
  324.          Width : in Field := 0);
  325.  
  326.       procedure Put
  327.         (File : in File_Type;
  328.          Item : in Num;
  329.          Fore : in Field := Default_Fore;
  330.          Aft  : in Field := Default_Aft;
  331.          Exp  : in Field := Default_Exp);
  332.  
  333.       procedure Put
  334.         (Item : in Num;
  335.          Fore : in Field := Default_Fore;
  336.          Aft  : in Field := Default_Aft;
  337.          Exp  : in Field := Default_Exp);
  338.  
  339.       procedure Get
  340.         (From : in String;
  341.          Item : out Num;
  342.          Last : out Positive);
  343.  
  344.       procedure Put
  345.         (To   : out String;
  346.          Item : in Num;
  347.          Aft  : in Field := Default_Aft;
  348.          Exp  : in Field := Default_Exp);
  349.  
  350.    end Float_Io;
  351.  
  352.    generic
  353.       type Num is delta <>;
  354.  
  355.    package Fixed_Io is
  356.       Default_Fore : Field := Num'Fore;
  357.       Default_Aft  : Field := Num'Aft;
  358.       Default_Exp  : Field := 0;
  359.  
  360.       procedure Get
  361.         (File  : in File_Type;
  362.          Item  : out Num;
  363.          Width : in Field := 0);
  364.  
  365.       procedure Get
  366.         (Item  : out Num;
  367.          Width : in Field := 0);
  368.  
  369.       procedure Put
  370.         (File : in File_Type;
  371.          Item : in Num;
  372.          Fore : in Field := Default_Fore;
  373.          Aft  : in Field := Default_Aft;
  374.          Exp  : in Field := Default_Exp);
  375.  
  376.       procedure Put
  377.         (Item : in Num;
  378.          Fore : in Field := Default_Fore;
  379.          Aft  : in Field := Default_Aft;
  380.          Exp  : in Field := Default_Exp);
  381.  
  382.       procedure Get
  383.         (From : in String;
  384.          Item : out Num; Last : out Positive);
  385.  
  386.       procedure Put
  387.         (To   : out String;
  388.          Item : in Num;
  389.          Aft  : in Field := Default_Aft;
  390.          Exp  : in Field := Default_Exp);
  391.  
  392.    end Fixed_Io;
  393.  
  394.  
  395.    --  generic
  396.    --     type Num is delta <> digits <>;
  397.  
  398.    --  package Decimal_IO is
  399.    --
  400.    --     Default_Fore : Field := Num'Fore;
  401.    --     Default_Aft  : Field := Num'Aft;
  402.    --     Default_Exp  : Field := 0;
  403.  
  404.    --     procedure Get
  405.    --       (File  : in File_Type;
  406.    --        Item  : out Num;
  407.    --        Width : in Field := 0);
  408.  
  409.    --     procedure Get
  410.    --       (Item  : out Num;
  411.    --        Width : in Field := 0);
  412.  
  413.    --     procedure Put
  414.    --       (File : in File_Type;
  415.    --        Item : in Num;
  416.    --        Fore : in Field := Default_Fore;
  417.    --        Aft  : in Field := Default_Aft;
  418.    --        Exp  : in Field := Default_Exp);
  419.  
  420.    --     procedure Put
  421.    --       (Item : in Num;
  422.    --        Fore : in Field := Default_Fore;
  423.    --        Aft  : in Field := Default_Aft;
  424.    --        Exp  : in Field := Default_Exp);
  425.  
  426.    --     procedure Get
  427.    --       (From : in  String;
  428.    --        Item : out Num;
  429.    --        Last : out Positive);
  430.  
  431.    --     procedure Put
  432.    --       (To   : out String;
  433.    --        Item : in Num;
  434.    --        Aft  : in Field := Default_Aft;
  435.    --        Exp  : in Field := Default_Exp);
  436.    --
  437.    --  end Decimal_IO;
  438.  
  439.    ---------------------------------------
  440.    -- Input-Output of Enumeration Types --
  441.    ---------------------------------------
  442.  
  443.    generic
  444.       type Enum is (<>);
  445.  
  446.    package Enumeration_Io is
  447.  
  448.       Default_Width : Field := 0;
  449.       Default_Setting : Type_Set := Upper_Case;
  450.  
  451.       procedure Get (File : in File_Type; Item : out Enum);
  452.       procedure Get (Item : out Enum);
  453.  
  454.       procedure Put
  455.         (File  : in File_Type;
  456.          Item  : in Enum;
  457.          Width : in Field := Default_Width;
  458.          Set   : in Type_Set := Default_Setting);
  459.  
  460.       procedure Put
  461.         (Item  : in Enum;
  462.          Width : in Field := Default_Width;
  463.          Set   : in Type_Set := Default_Setting);
  464.  
  465.       procedure Get
  466.         (From : in String;
  467.          Item : out Enum;
  468.          Last : out positive);
  469.  
  470.       procedure Put
  471.         (To   : out String;
  472.          Item : in Enum;
  473.          Set  : in Type_Set := Default_Setting);
  474.  
  475.    end Enumeration_Io;
  476.  
  477.    --  Exceptions
  478.  
  479.    Status_Error : exception renames IO_Exceptions.Status_Error;
  480.    Mode_Error   : exception renames IO_Exceptions.Mode_Error;
  481.    Name_Error   : exception renames IO_Exceptions.Name_Error;
  482.    Use_Error    : exception renames IO_Exceptions.Use_Error;
  483.    Device_Error : exception renames IO_Exceptions.Device_Error;
  484.    End_Error    : exception renames IO_Exceptions.End_Error;
  485.    Data_Error   : exception renames IO_Exceptions.Data_Error;
  486.    Layout_Error : exception renames IO_Exceptions.Layout_Error;
  487.  
  488. private
  489.    type File_Ptr is new System.Address;
  490.  
  491.    type Pstring is access String;
  492.  
  493.    --  Ada File Control Block
  494.  
  495.    type AFCB is record
  496.       AFCB_In_Use : Boolean;
  497.       Desc        : File_Ptr;
  498.       Name        : Pstring;
  499.       Form        : Pstring;
  500.       Mode        : File_Mode;
  501.       Page        : Count;
  502.       Line        : Count;
  503.       Col         : Positive_Count;
  504.       Line_Length : Count;
  505.       Page_Length : Count;
  506.       Count       : Integer;
  507.       Is_Keyboard : Boolean;
  508.       Look_Ahead  : String (1 .. 3);
  509.    end record;
  510.  
  511.    type File_Type is access AFCB;
  512.  
  513. end Ada.Text_IO;
  514.